import 'package:flutter/material.dart';
import 'package:flutter2/extends.dart';

class FormApp extends StatefulWidget{
  @override
  State<StatefulWidget> createState() {
    return _MyState();
  }

}

/*
autovalidate：是否自动校验输入内容；当为true时，每一个子FormField内容发生变化时都会自动校验合法性，并直接显示错误信息。否则，需要通过调用FormState.validate()来手动校验。
onWillPop：决定Form所在的路由是否可以直接返回（如点击返回按钮），该回调返回一个Future对象，如果Future的最终结果是false，则当前路由不会返回；如果为true，则会返回到上一个路由。此属性通常用于拦截返回按钮。
onChanged：Form的任意一个子FormField内容发生变化时会触发此回调。
 */
class _MyState extends State<FormApp>{
  TextEditingController _usernameController=TextEditingController();
  TextEditingController _passwordController=TextEditingController();
  GlobalKey _formKey=GlobalKey<FormState>();
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('FormApp'),
      ),
      body: Form(
        key: _formKey,
        autovalidate: false,
        onChanged: (){
          dddBug('msg');
        },
        child: Column(
          children: <Widget>[
            TextFormField(
              decoration: InputDecoration(
                hintText: '用户名'
              ),
              controller: _usernameController,
              validator: (v){
                return v.trim().length>0?null:'用户名不能为空';
              },
            ),
            TextFormField(
              decoration: InputDecoration(
                hintText: '密码'
              ),
              controller: _passwordController,
              validator: (v){
                return v.trim().length>0?null:'密码不能为空';
              },
            ),
            RaisedButton(
              child: Text('登录'),
              onPressed: (){
                //在这里不能通过此方式获取FormState，context不对
                //print(Form.of(context));

                // 通过_formKey.currentState 获取FormState后，
                // 调用validate()方法校验用户名密码是否合法，校验
                // 通过后再提交数据。
                if((_formKey.currentState as FormState).validate()){
                  //验证通过提交数据
                  showToast('登录成功');
                  Navigator.pop(context);
                }
              },
            ),
            Expanded(
              child: Builder(builder: (context){
                return RaisedButton(
                  child: Text('另外一种获取context的方式'),
                  onPressed: (){
                    //由于本widget也是Form的子代widget，所以可以通过下面方式获取FormState
                    if(Form.of(context).validate()){
                      //验证通过提交数据
                      showToast('登录成功');
                      Navigator.pop(context);
                    }
                  },
                );
              },)
            ),
          ],
        ),
      ),
    );
  }

}